package dfbz.com.service;

import dfbz.com.model.Dept;
import dfbz.com.model.UserFocus;
import dfbz.com.model.UserInfo;
import dfbz.com.model.toolmodel.PageBean;
import dfbz.com.model.User;

import java.util.List;
import java.util.Map;

public interface UserService<T>  {
    /**
     * 通过名字查找用户
     *
     * @param username 用户名
     * @return 存在就返回true；否则返回false
     */

    User findUser(String username);

    /**
     * 通过邮件查找用户
     *
     * @param email
     * @return
     */
    User findUserByEmail(String email);


    /**
     * 添加新用户
     *
     * @param t
     */
    void add(T t);




    /**
     * 重置用户登录密码
     *
     * @param user
     */
    void replacePw(User user);



    /**
     *
     * 加载所有用户基本信息到页面
     */

    List showUser();


    /**
     * 通过用户id得到用户
     *
     * @param id
     * @return
     */
    User findUserById(Object id);



    /**
     * 分页查找用户对象
     *
     * @param current 第几页
     * @param row 每页几条用户信息
     * @return 分页对象PageBean
     */
    PageBean showUserByPage(String current, String row);



    /**
     * 找到登录的用户的关注id列表
     *
     * @param userId 登录的用户id
     * @return 这个登录用户所关注的用户对象
     */
    List<UserFocus> findFocusUser(Object userId);



    List<UserFocus> findFocusUserPage(Object userId,Integer current);



    List<Map<String, Object>> showUserByPage(Integer userId, String current, String search);

    /**
     * 查询到的用户信息总数
     *
     * @param search
     * @return
     */
    long findTotalCount(String search);


    /**
     * 找到登录用户所在的部门名字
     * @param deptId
     * @return
     */
    Dept findDeptName(Integer deptId);


    /**
     * 登录成功后更新该用户的登录时间
     * @param id
     * @return
     */
    Boolean updateLoginTime(Integer id);


    /**
     * 根据登录的用户id和他要关注的用户uId找是否已经关注过
     *
     * @param userId   用户id
     * @param uId      要关注的用户id
     * @return         用户关注表对象
     */
    UserFocus findFollowData(String userId, String uId);


    /**
     * 加入关注
     *
     * @param userId 用户id
     * @param uId 要关注的用户id
     */

    void addFollow(String userId, String uId);

    /**
     * 所关注用户的总数
     *
     * @param userId 用户id
     * @return 该用户所关注用户的总数
     */

    Long findFocusTotalCount(Object userId);


    /**
     * 删除取消关注的用户
     *
     * @param userId 用户id
     * @param uId 要删除的用户id
     */
    void deleteFollow(Object userId, String uId);

    /**
     * 更新用户的头像地址
     *
     * @param path tou像地址
     * @param id 用户id
     */
    void updateImg(String path, String id);

    /**
     * 找到userInfo对象
     *
     * @param id 用户id
     * @return userInfo对象
     */

    UserInfo findUserInfoById(Integer id);


    /**
     * 找到查看用户详情的用户信息
     *
     * @param userId id
     * @return 详情map对象
     */
    Map findUserDetailInfo(String userId);


    /**
     * 通过部门名字找到部门id
     *
     * @param dept 部门名字
     * @return 部门id
     */
    Integer findDeptIdByDeptName(String dept);


    /**
     * 更新对应表格中的数据
     *
     * @param table 表对象
     */
    void updateTable(Object table);

    /**
     * 添加用户的被查看数
     *
     * @param uId 被查看用户id
     */

    void addLook(String uId);


    /**
     * 找到所查询用户的粉丝数
     *
     * @param uId 被查看用户id
     * @return 该用户被关注数
     */
    Integer findFocusCount(String uId);

    /**
     * 找到登录用户所关注的其他用户个数
     *
     * @param userId 登录的用户id
     * @return 关注个数
     */

    Integer findMyFocusCount(String userId);
}
